﻿// Copyright 2004-2018 Castle Project - http://www.castleproject.org/
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// This file was automatically generated by 'ModelFakes.tt', please don't edit manually.

namespace Castle.Facilities.AspNetCore.Tests.Fakes
{	
	using System;

	using Castle.Core;
	using Castle.MicroKernel.Registration;
	using Castle.Windsor;

	using Microsoft.AspNetCore.Mvc;
	using Microsoft.AspNetCore.Razor.TagHelpers;
	using Microsoft.Extensions.DependencyInjection;

	public partial class OpenOptions {}
	public partial class ClosedOptions {}

	public interface IDisposableObservable 
	{
		bool Disposed { get;set; }
		int DisposedCount { get;set; }
	}

	public interface IWeakReferenceObservable 
	{
		bool HasReference { get; }
	}

	public partial class ServiceProviderOnlyTransient : IWeakReferenceObservable 
	{
		private readonly WeakReference reference;

		public ServiceProviderOnlyTransient()
		{
			reference = new WeakReference(this, false);
		}

		public bool HasReference => reference.IsAlive;
	}

	public partial class ServiceProviderOnlyTransientGeneric<T> : ServiceProviderOnlyTransient { }

	public partial class ServiceProviderOnlyTransientDisposable : ServiceProviderOnlyTransient, IDisposable, IDisposableObservable, IWeakReferenceObservable
	{ 
		public bool Disposed { get;set; }
		public int DisposedCount { get;set; }
		public void Dispose() { Disposed = true; DisposedCount++; } 
	}

	public partial class ServiceProviderOnlyScoped : IWeakReferenceObservable 
	{
		private readonly WeakReference reference;

		public ServiceProviderOnlyScoped()
		{
			reference = new WeakReference(this, false);
		}

		public bool HasReference => reference.IsAlive;
	}

	public partial class ServiceProviderOnlyScopedGeneric<T> : ServiceProviderOnlyScoped { }

	public partial class ServiceProviderOnlyScopedDisposable : ServiceProviderOnlyScoped, IDisposable, IDisposableObservable, IWeakReferenceObservable
	{ 
		public bool Disposed { get;set; }
		public int DisposedCount { get;set; }
		public void Dispose() { Disposed = true; DisposedCount++; } 
	}

	public partial class ServiceProviderOnlySingleton : IWeakReferenceObservable 
	{
		private readonly WeakReference reference;

		public ServiceProviderOnlySingleton()
		{
			reference = new WeakReference(this, false);
		}

		public bool HasReference => reference.IsAlive;
	}

	public partial class ServiceProviderOnlySingletonGeneric<T> : ServiceProviderOnlySingleton { }

	public partial class ServiceProviderOnlySingletonDisposable : ServiceProviderOnlySingleton, IDisposable, IDisposableObservable, IWeakReferenceObservable
	{ 
		public bool Disposed { get;set; }
		public int DisposedCount { get;set; }
		public void Dispose() { Disposed = true; DisposedCount++; } 
	}

	public partial class WindsorOnlyTransient : IWeakReferenceObservable 
	{
		private readonly WeakReference reference;

		public WindsorOnlyTransient()
		{
			reference = new WeakReference(this, false);
		}

		public bool HasReference => reference.IsAlive;
	}

	public partial class WindsorOnlyTransientGeneric<T> : WindsorOnlyTransient { }

	public partial class WindsorOnlyTransientDisposable : WindsorOnlyTransient, IDisposable, IDisposableObservable, IWeakReferenceObservable
	{ 
		public bool Disposed { get;set; }
		public int DisposedCount { get;set; }
		public void Dispose() { Disposed = true; DisposedCount++; } 
	}

	public partial class WindsorOnlyScoped : IWeakReferenceObservable 
	{
		private readonly WeakReference reference;

		public WindsorOnlyScoped()
		{
			reference = new WeakReference(this, false);
		}

		public bool HasReference => reference.IsAlive;
	}

	public partial class WindsorOnlyScopedGeneric<T> : WindsorOnlyScoped { }

	public partial class WindsorOnlyScopedDisposable : WindsorOnlyScoped, IDisposable, IDisposableObservable, IWeakReferenceObservable
	{ 
		public bool Disposed { get;set; }
		public int DisposedCount { get;set; }
		public void Dispose() { Disposed = true; DisposedCount++; } 
	}

	public partial class WindsorOnlySingleton : IWeakReferenceObservable 
	{
		private readonly WeakReference reference;

		public WindsorOnlySingleton()
		{
			reference = new WeakReference(this, false);
		}

		public bool HasReference => reference.IsAlive;
	}

	public partial class WindsorOnlySingletonGeneric<T> : WindsorOnlySingleton { }

	public partial class WindsorOnlySingletonDisposable : WindsorOnlySingleton, IDisposable, IDisposableObservable, IWeakReferenceObservable
	{ 
		public bool Disposed { get;set; }
		public int DisposedCount { get;set; }
		public void Dispose() { Disposed = true; DisposedCount++; } 
	}

	public partial class CrossWiredTransient : IWeakReferenceObservable 
	{
		private readonly WeakReference reference;

		public CrossWiredTransient()
		{
			reference = new WeakReference(this, false);
		}

		public bool HasReference => reference.IsAlive;
	}

	public partial class CrossWiredTransientGeneric<T> : CrossWiredTransient { }

	public partial class CrossWiredTransientDisposable : CrossWiredTransient, IDisposable, IDisposableObservable, IWeakReferenceObservable
	{ 
		public bool Disposed { get;set; }
		public int DisposedCount { get;set; }
		public void Dispose() { Disposed = true; DisposedCount++; } 
	}

	public partial class CrossWiredScoped : IWeakReferenceObservable 
	{
		private readonly WeakReference reference;

		public CrossWiredScoped()
		{
			reference = new WeakReference(this, false);
		}

		public bool HasReference => reference.IsAlive;
	}

	public partial class CrossWiredScopedGeneric<T> : CrossWiredScoped { }

	public partial class CrossWiredScopedDisposable : CrossWiredScoped, IDisposable, IDisposableObservable, IWeakReferenceObservable
	{ 
		public bool Disposed { get;set; }
		public int DisposedCount { get;set; }
		public void Dispose() { Disposed = true; DisposedCount++; } 
	}

	public partial class CrossWiredSingleton : IWeakReferenceObservable 
	{
		private readonly WeakReference reference;

		public CrossWiredSingleton()
		{
			reference = new WeakReference(this, false);
		}

		public bool HasReference => reference.IsAlive;
	}

	public partial class CrossWiredSingletonGeneric<T> : CrossWiredSingleton { }

	public partial class CrossWiredSingletonDisposable : CrossWiredSingleton, IDisposable, IDisposableObservable, IWeakReferenceObservable
	{ 
		public bool Disposed { get;set; }
		public int DisposedCount { get;set; }
		public void Dispose() { Disposed = true; DisposedCount++; } 
	}

	public partial class ModelInstaller 
	{
		public static void RegisterWindsor(IWindsorContainer container) 
		{
			container.Register(Component.For<WindsorOnlyTransient>().LifestyleTransient()); 
			container.Register(Component.For(typeof(WindsorOnlyTransientGeneric<>)).LifestyleTransient()); 
			container.Register(Component.For<WindsorOnlyTransientGeneric<ClosedOptions>>().LifestyleTransient()); 
			container.Register(Component.For<WindsorOnlyTransientDisposable>().LifestyleTransient()); 

			container.Register(Component.For<WindsorOnlyScoped>().LifestyleScoped()); 
			container.Register(Component.For(typeof(WindsorOnlyScopedGeneric<>)).LifestyleScoped()); 
			container.Register(Component.For<WindsorOnlyScopedGeneric<ClosedOptions>>().LifestyleScoped()); 
			container.Register(Component.For<WindsorOnlyScopedDisposable>().LifestyleScoped()); 

			container.Register(Component.For<WindsorOnlySingleton>().LifestyleSingleton()); 
			container.Register(Component.For(typeof(WindsorOnlySingletonGeneric<>)).LifestyleSingleton()); 
			container.Register(Component.For<WindsorOnlySingletonGeneric<ClosedOptions>>().LifestyleSingleton()); 
			container.Register(Component.For<WindsorOnlySingletonDisposable>().LifestyleSingleton()); 

			container.Register(Component.For<ControllerWindsorOnly>().LifestyleScoped()); 
			container.Register(Component.For<TagHelperWindsorOnly>().LifestyleScoped()); 
			container.Register(Component.For<ViewComponentWindsorOnly>().LifestyleScoped()); 


		}
		
		public static void RegisterServiceCollection(IServiceCollection services) 
		{
			services.AddTransient<ServiceProviderOnlyTransient>(); 
			services.AddTransient(typeof(ServiceProviderOnlyTransientGeneric<OpenOptions>)); 
			services.AddTransient<ServiceProviderOnlyTransientGeneric<ClosedOptions>>(); 
			services.AddTransient<ServiceProviderOnlyTransientDisposable>(); 

			services.AddScoped<ServiceProviderOnlyScoped>(); 
			services.AddScoped(typeof(ServiceProviderOnlyScopedGeneric<OpenOptions>)); 
			services.AddScoped<ServiceProviderOnlyScopedGeneric<ClosedOptions>>(); 
			services.AddScoped<ServiceProviderOnlyScopedDisposable>(); 

			services.AddSingleton<ServiceProviderOnlySingleton>(); 
			services.AddSingleton(typeof(ServiceProviderOnlySingletonGeneric<OpenOptions>)); 
			services.AddSingleton<ServiceProviderOnlySingletonGeneric<ClosedOptions>>(); 
			services.AddSingleton<ServiceProviderOnlySingletonDisposable>(); 

			services.AddScoped<ControllerServiceProviderOnly>(); 
			services.AddScoped<TagHelperServiceProviderOnly>(); 
			services.AddScoped<ViewComponentServiceProviderOnly>(); 


		}
		
		public static void RegisterCrossWired(IWindsorContainer container, IServiceCollection serviceCollection) 
		{
			container.Register(Component.For<CrossWiredTransient>().CrossWired().LifestyleTransient()); 
			container.Register(Component.For<CrossWiredTransientGeneric<OpenOptions>>().CrossWired().LifestyleTransient()); 
			container.Register(Component.For<CrossWiredTransientGeneric<ClosedOptions>>().CrossWired().LifestyleTransient()); 
			container.Register(Component.For<CrossWiredTransientDisposable>().CrossWired().LifestyleTransient()); 

			container.Register(Component.For<CrossWiredScoped>().CrossWired().LifestyleScoped()); 
			container.Register(Component.For<CrossWiredScopedGeneric<OpenOptions>>().CrossWired().LifestyleScoped()); 
			container.Register(Component.For<CrossWiredScopedGeneric<ClosedOptions>>().CrossWired().LifestyleScoped()); 
			container.Register(Component.For<CrossWiredScopedDisposable>().CrossWired().LifestyleScoped()); 

			container.Register(Component.For<CrossWiredSingleton>().CrossWired().LifestyleSingleton()); 
			container.Register(Component.For<CrossWiredSingletonGeneric<OpenOptions>>().CrossWired().LifestyleSingleton()); 
			container.Register(Component.For<CrossWiredSingletonGeneric<ClosedOptions>>().CrossWired().LifestyleSingleton()); 
			container.Register(Component.For<CrossWiredSingletonDisposable>().CrossWired().LifestyleSingleton()); 

			container.Register(Component.For<OpenOptions>().CrossWired().LifestyleSingleton());  
			container.Register(Component.For<ControllerCrossWired>().CrossWired().LifestyleScoped());  
			container.Register(Component.For<TagHelperCrossWired>().CrossWired().LifestyleScoped());  
			container.Register(Component.For<ViewComponentCrossWired>().CrossWired().LifestyleScoped());  

		}
	}

	public partial class ControllerWindsorOnly : Controller
	{
		public ControllerWindsorOnly
		(
			WindsorOnlyTransient WindsorOnlyTransient1, 
			WindsorOnlyTransientGeneric<OpenOptions> WindsorOnlyTransient2, 
			WindsorOnlyTransientGeneric<ClosedOptions> WindsorOnlyTransient3, 
			WindsorOnlyTransientDisposable WindsorOnlyTransient4 ,
			WindsorOnlyScoped WindsorOnlyScoped1, 
			WindsorOnlyScopedGeneric<OpenOptions> WindsorOnlyScoped2, 
			WindsorOnlyScopedGeneric<ClosedOptions> WindsorOnlyScoped3, 
			WindsorOnlyScopedDisposable WindsorOnlyScoped4 ,
			WindsorOnlySingleton WindsorOnlySingleton1, 
			WindsorOnlySingletonGeneric<OpenOptions> WindsorOnlySingleton2, 
			WindsorOnlySingletonGeneric<ClosedOptions> WindsorOnlySingleton3, 
			WindsorOnlySingletonDisposable WindsorOnlySingleton4 )
		{
			if (WindsorOnlyTransient1 == null) throw new ArgumentException(nameof(WindsorOnlyTransient1)); 
			if (WindsorOnlyTransient2 == null) throw new ArgumentException(nameof(WindsorOnlyTransient2)); 
			if (WindsorOnlyTransient3 == null) throw new ArgumentException(nameof(WindsorOnlyTransient3)); 
			if (WindsorOnlyTransient4 == null) throw new ArgumentException(nameof(WindsorOnlyTransient4)); 
			if (WindsorOnlyScoped1 == null) throw new ArgumentException(nameof(WindsorOnlyScoped1)); 
			if (WindsorOnlyScoped2 == null) throw new ArgumentException(nameof(WindsorOnlyScoped2)); 
			if (WindsorOnlyScoped3 == null) throw new ArgumentException(nameof(WindsorOnlyScoped3)); 
			if (WindsorOnlyScoped4 == null) throw new ArgumentException(nameof(WindsorOnlyScoped4)); 
			if (WindsorOnlySingleton1 == null) throw new ArgumentException(nameof(WindsorOnlySingleton1)); 
			if (WindsorOnlySingleton2 == null) throw new ArgumentException(nameof(WindsorOnlySingleton2)); 
			if (WindsorOnlySingleton3 == null) throw new ArgumentException(nameof(WindsorOnlySingleton3)); 
			if (WindsorOnlySingleton4 == null) throw new ArgumentException(nameof(WindsorOnlySingleton4)); 
		}
	}

	public partial class TagHelperWindsorOnly : TagHelper
	{
		public TagHelperWindsorOnly
		(
			WindsorOnlyTransient WindsorOnlyTransient1, 
			WindsorOnlyTransientGeneric<OpenOptions> WindsorOnlyTransient2, 
			WindsorOnlyTransientGeneric<ClosedOptions> WindsorOnlyTransient3, 
			WindsorOnlyTransientDisposable WindsorOnlyTransient4 ,
			WindsorOnlyScoped WindsorOnlyScoped1, 
			WindsorOnlyScopedGeneric<OpenOptions> WindsorOnlyScoped2, 
			WindsorOnlyScopedGeneric<ClosedOptions> WindsorOnlyScoped3, 
			WindsorOnlyScopedDisposable WindsorOnlyScoped4 ,
			WindsorOnlySingleton WindsorOnlySingleton1, 
			WindsorOnlySingletonGeneric<OpenOptions> WindsorOnlySingleton2, 
			WindsorOnlySingletonGeneric<ClosedOptions> WindsorOnlySingleton3, 
			WindsorOnlySingletonDisposable WindsorOnlySingleton4 )
		{
			if (WindsorOnlyTransient1 == null) throw new ArgumentException(nameof(WindsorOnlyTransient1)); 
			if (WindsorOnlyTransient2 == null) throw new ArgumentException(nameof(WindsorOnlyTransient2)); 
			if (WindsorOnlyTransient3 == null) throw new ArgumentException(nameof(WindsorOnlyTransient3)); 
			if (WindsorOnlyTransient4 == null) throw new ArgumentException(nameof(WindsorOnlyTransient4)); 
			if (WindsorOnlyScoped1 == null) throw new ArgumentException(nameof(WindsorOnlyScoped1)); 
			if (WindsorOnlyScoped2 == null) throw new ArgumentException(nameof(WindsorOnlyScoped2)); 
			if (WindsorOnlyScoped3 == null) throw new ArgumentException(nameof(WindsorOnlyScoped3)); 
			if (WindsorOnlyScoped4 == null) throw new ArgumentException(nameof(WindsorOnlyScoped4)); 
			if (WindsorOnlySingleton1 == null) throw new ArgumentException(nameof(WindsorOnlySingleton1)); 
			if (WindsorOnlySingleton2 == null) throw new ArgumentException(nameof(WindsorOnlySingleton2)); 
			if (WindsorOnlySingleton3 == null) throw new ArgumentException(nameof(WindsorOnlySingleton3)); 
			if (WindsorOnlySingleton4 == null) throw new ArgumentException(nameof(WindsorOnlySingleton4)); 
		}
	}

	public class ViewComponentWindsorOnly : ViewComponent
	{
		public ViewComponentWindsorOnly
		(
			WindsorOnlyTransient WindsorOnlyTransient1, 
			WindsorOnlyTransientGeneric<OpenOptions> WindsorOnlyTransient2, 
			WindsorOnlyTransientGeneric<ClosedOptions> WindsorOnlyTransient3, 
			WindsorOnlyTransientDisposable WindsorOnlyTransient4 ,
			WindsorOnlyScoped WindsorOnlyScoped1, 
			WindsorOnlyScopedGeneric<OpenOptions> WindsorOnlyScoped2, 
			WindsorOnlyScopedGeneric<ClosedOptions> WindsorOnlyScoped3, 
			WindsorOnlyScopedDisposable WindsorOnlyScoped4 ,
			WindsorOnlySingleton WindsorOnlySingleton1, 
			WindsorOnlySingletonGeneric<OpenOptions> WindsorOnlySingleton2, 
			WindsorOnlySingletonGeneric<ClosedOptions> WindsorOnlySingleton3, 
			WindsorOnlySingletonDisposable WindsorOnlySingleton4 )
		{
			if (WindsorOnlyTransient1 == null) throw new ArgumentException(nameof(WindsorOnlyTransient1)); 
			if (WindsorOnlyTransient2 == null) throw new ArgumentException(nameof(WindsorOnlyTransient2)); 
			if (WindsorOnlyTransient3 == null) throw new ArgumentException(nameof(WindsorOnlyTransient3)); 
			if (WindsorOnlyTransient4 == null) throw new ArgumentException(nameof(WindsorOnlyTransient4)); 
			if (WindsorOnlyScoped1 == null) throw new ArgumentException(nameof(WindsorOnlyScoped1)); 
			if (WindsorOnlyScoped2 == null) throw new ArgumentException(nameof(WindsorOnlyScoped2)); 
			if (WindsorOnlyScoped3 == null) throw new ArgumentException(nameof(WindsorOnlyScoped3)); 
			if (WindsorOnlyScoped4 == null) throw new ArgumentException(nameof(WindsorOnlyScoped4)); 
			if (WindsorOnlySingleton1 == null) throw new ArgumentException(nameof(WindsorOnlySingleton1)); 
			if (WindsorOnlySingleton2 == null) throw new ArgumentException(nameof(WindsorOnlySingleton2)); 
			if (WindsorOnlySingleton3 == null) throw new ArgumentException(nameof(WindsorOnlySingleton3)); 
			if (WindsorOnlySingleton4 == null) throw new ArgumentException(nameof(WindsorOnlySingleton4)); 
		}
	}

	public partial class ControllerServiceProviderOnly : Controller
	{
		public ControllerServiceProviderOnly
		(
			ServiceProviderOnlyTransient ServiceProviderOnlyTransient1, 
			ServiceProviderOnlyTransientGeneric<OpenOptions> ServiceProviderOnlyTransient2, 
			ServiceProviderOnlyTransientGeneric<ClosedOptions> ServiceProviderOnlyTransient3, 
			ServiceProviderOnlyTransientDisposable ServiceProviderOnlyTransient4 ,
			ServiceProviderOnlyScoped ServiceProviderOnlyScoped1, 
			ServiceProviderOnlyScopedGeneric<OpenOptions> ServiceProviderOnlyScoped2, 
			ServiceProviderOnlyScopedGeneric<ClosedOptions> ServiceProviderOnlyScoped3, 
			ServiceProviderOnlyScopedDisposable ServiceProviderOnlyScoped4 ,
			ServiceProviderOnlySingleton ServiceProviderOnlySingleton1, 
			ServiceProviderOnlySingletonGeneric<OpenOptions> ServiceProviderOnlySingleton2, 
			ServiceProviderOnlySingletonGeneric<ClosedOptions> ServiceProviderOnlySingleton3, 
			ServiceProviderOnlySingletonDisposable ServiceProviderOnlySingleton4 )
		{
		}
	}

	public partial class TagHelperServiceProviderOnly : TagHelper
	{
		public TagHelperServiceProviderOnly
		(
			ServiceProviderOnlyTransient ServiceProviderOnlyTransient1, 
			ServiceProviderOnlyTransientGeneric<OpenOptions> ServiceProviderOnlyTransient2, 
			ServiceProviderOnlyTransientGeneric<ClosedOptions> ServiceProviderOnlyTransient3, 
			ServiceProviderOnlyTransientDisposable ServiceProviderOnlyTransient4 ,
			ServiceProviderOnlyScoped ServiceProviderOnlyScoped1, 
			ServiceProviderOnlyScopedGeneric<OpenOptions> ServiceProviderOnlyScoped2, 
			ServiceProviderOnlyScopedGeneric<ClosedOptions> ServiceProviderOnlyScoped3, 
			ServiceProviderOnlyScopedDisposable ServiceProviderOnlyScoped4 ,
			ServiceProviderOnlySingleton ServiceProviderOnlySingleton1, 
			ServiceProviderOnlySingletonGeneric<OpenOptions> ServiceProviderOnlySingleton2, 
			ServiceProviderOnlySingletonGeneric<ClosedOptions> ServiceProviderOnlySingleton3, 
			ServiceProviderOnlySingletonDisposable ServiceProviderOnlySingleton4 )
		{
			if (ServiceProviderOnlyTransient1 == null) throw new ArgumentException(nameof(ServiceProviderOnlyTransient1)); 
			if (ServiceProviderOnlyTransient2 == null) throw new ArgumentException(nameof(ServiceProviderOnlyTransient2)); 
			if (ServiceProviderOnlyTransient3 == null) throw new ArgumentException(nameof(ServiceProviderOnlyTransient3)); 
			if (ServiceProviderOnlyTransient4 == null) throw new ArgumentException(nameof(ServiceProviderOnlyTransient4)); 
			if (ServiceProviderOnlyScoped1 == null) throw new ArgumentException(nameof(ServiceProviderOnlyScoped1)); 
			if (ServiceProviderOnlyScoped2 == null) throw new ArgumentException(nameof(ServiceProviderOnlyScoped2)); 
			if (ServiceProviderOnlyScoped3 == null) throw new ArgumentException(nameof(ServiceProviderOnlyScoped3)); 
			if (ServiceProviderOnlyScoped4 == null) throw new ArgumentException(nameof(ServiceProviderOnlyScoped4)); 
			if (ServiceProviderOnlySingleton1 == null) throw new ArgumentException(nameof(ServiceProviderOnlySingleton1)); 
			if (ServiceProviderOnlySingleton2 == null) throw new ArgumentException(nameof(ServiceProviderOnlySingleton2)); 
			if (ServiceProviderOnlySingleton3 == null) throw new ArgumentException(nameof(ServiceProviderOnlySingleton3)); 
			if (ServiceProviderOnlySingleton4 == null) throw new ArgumentException(nameof(ServiceProviderOnlySingleton4)); 
		}
	}

	public partial class ViewComponentServiceProviderOnly : ViewComponent
	{
		public ViewComponentServiceProviderOnly
		(
			ServiceProviderOnlyTransient ServiceProviderOnlyTransient1, 
			ServiceProviderOnlyTransientGeneric<OpenOptions> ServiceProviderOnlyTransient2, 
			ServiceProviderOnlyTransientGeneric<ClosedOptions> ServiceProviderOnlyTransient3, 
			ServiceProviderOnlyTransientDisposable ServiceProviderOnlyTransient4 ,
			ServiceProviderOnlyScoped ServiceProviderOnlyScoped1, 
			ServiceProviderOnlyScopedGeneric<OpenOptions> ServiceProviderOnlyScoped2, 
			ServiceProviderOnlyScopedGeneric<ClosedOptions> ServiceProviderOnlyScoped3, 
			ServiceProviderOnlyScopedDisposable ServiceProviderOnlyScoped4 ,
			ServiceProviderOnlySingleton ServiceProviderOnlySingleton1, 
			ServiceProviderOnlySingletonGeneric<OpenOptions> ServiceProviderOnlySingleton2, 
			ServiceProviderOnlySingletonGeneric<ClosedOptions> ServiceProviderOnlySingleton3, 
			ServiceProviderOnlySingletonDisposable ServiceProviderOnlySingleton4 )
		{
			if (ServiceProviderOnlyTransient1 == null) throw new ArgumentException(nameof(ServiceProviderOnlyTransient1)); 
			if (ServiceProviderOnlyTransient2 == null) throw new ArgumentException(nameof(ServiceProviderOnlyTransient2)); 
			if (ServiceProviderOnlyTransient3 == null) throw new ArgumentException(nameof(ServiceProviderOnlyTransient3)); 
			if (ServiceProviderOnlyTransient4 == null) throw new ArgumentException(nameof(ServiceProviderOnlyTransient4)); 
			if (ServiceProviderOnlyScoped1 == null) throw new ArgumentException(nameof(ServiceProviderOnlyScoped1)); 
			if (ServiceProviderOnlyScoped2 == null) throw new ArgumentException(nameof(ServiceProviderOnlyScoped2)); 
			if (ServiceProviderOnlyScoped3 == null) throw new ArgumentException(nameof(ServiceProviderOnlyScoped3)); 
			if (ServiceProviderOnlyScoped4 == null) throw new ArgumentException(nameof(ServiceProviderOnlyScoped4)); 
			if (ServiceProviderOnlySingleton1 == null) throw new ArgumentException(nameof(ServiceProviderOnlySingleton1)); 
			if (ServiceProviderOnlySingleton2 == null) throw new ArgumentException(nameof(ServiceProviderOnlySingleton2)); 
			if (ServiceProviderOnlySingleton3 == null) throw new ArgumentException(nameof(ServiceProviderOnlySingleton3)); 
			if (ServiceProviderOnlySingleton4 == null) throw new ArgumentException(nameof(ServiceProviderOnlySingleton4)); 
		}
	}

	public partial class ControllerCrossWired : Controller
	{
		public ControllerCrossWired
		(
			CrossWiredTransient CrossWiredTransient1, 
			CrossWiredTransientGeneric<OpenOptions> CrossWiredTransient2, 
			CrossWiredTransientGeneric<ClosedOptions> CrossWiredTransient3, 
			CrossWiredTransientDisposable CrossWiredTransient4 ,
			CrossWiredScoped CrossWiredScoped1, 
			CrossWiredScopedGeneric<OpenOptions> CrossWiredScoped2, 
			CrossWiredScopedGeneric<ClosedOptions> CrossWiredScoped3, 
			CrossWiredScopedDisposable CrossWiredScoped4 ,
			CrossWiredSingleton CrossWiredSingleton1, 
			CrossWiredSingletonGeneric<OpenOptions> CrossWiredSingleton2, 
			CrossWiredSingletonGeneric<ClosedOptions> CrossWiredSingleton3, 
			CrossWiredSingletonDisposable CrossWiredSingleton4 )
		{
			if (CrossWiredTransient1 == null) throw new ArgumentException(nameof(CrossWiredTransient1)); 
			if (CrossWiredTransient2 == null) throw new ArgumentException(nameof(CrossWiredTransient2)); 
			if (CrossWiredTransient3 == null) throw new ArgumentException(nameof(CrossWiredTransient3)); 
			if (CrossWiredTransient4 == null) throw new ArgumentException(nameof(CrossWiredTransient4)); 
			if (CrossWiredScoped1 == null) throw new ArgumentException(nameof(CrossWiredScoped1)); 
			if (CrossWiredScoped2 == null) throw new ArgumentException(nameof(CrossWiredScoped2)); 
			if (CrossWiredScoped3 == null) throw new ArgumentException(nameof(CrossWiredScoped3)); 
			if (CrossWiredScoped4 == null) throw new ArgumentException(nameof(CrossWiredScoped4)); 
			if (CrossWiredSingleton1 == null) throw new ArgumentException(nameof(CrossWiredSingleton1)); 
			if (CrossWiredSingleton2 == null) throw new ArgumentException(nameof(CrossWiredSingleton2)); 
			if (CrossWiredSingleton3 == null) throw new ArgumentException(nameof(CrossWiredSingleton3)); 
			if (CrossWiredSingleton4 == null) throw new ArgumentException(nameof(CrossWiredSingleton4)); 
		}
	}

	public partial class TagHelperCrossWired : TagHelper
	{
		public TagHelperCrossWired
		(
			CrossWiredTransient CrossWiredTransient1, 
			CrossWiredTransientGeneric<OpenOptions> CrossWiredTransient2, 
			CrossWiredTransientGeneric<ClosedOptions> CrossWiredTransient3, 
			CrossWiredTransientDisposable CrossWiredTransient4 ,
			CrossWiredScoped CrossWiredScoped1, 
			CrossWiredScopedGeneric<OpenOptions> CrossWiredScoped2, 
			CrossWiredScopedGeneric<ClosedOptions> CrossWiredScoped3, 
			CrossWiredScopedDisposable CrossWiredScoped4 ,
			CrossWiredSingleton CrossWiredSingleton1, 
			CrossWiredSingletonGeneric<OpenOptions> CrossWiredSingleton2, 
			CrossWiredSingletonGeneric<ClosedOptions> CrossWiredSingleton3, 
			CrossWiredSingletonDisposable CrossWiredSingleton4 )
		{
			if (CrossWiredTransient1 == null) throw new ArgumentException(nameof(CrossWiredTransient1)); 
			if (CrossWiredTransient2 == null) throw new ArgumentException(nameof(CrossWiredTransient2)); 
			if (CrossWiredTransient3 == null) throw new ArgumentException(nameof(CrossWiredTransient3)); 
			if (CrossWiredTransient4 == null) throw new ArgumentException(nameof(CrossWiredTransient4)); 
			if (CrossWiredScoped1 == null) throw new ArgumentException(nameof(CrossWiredScoped1)); 
			if (CrossWiredScoped2 == null) throw new ArgumentException(nameof(CrossWiredScoped2)); 
			if (CrossWiredScoped3 == null) throw new ArgumentException(nameof(CrossWiredScoped3)); 
			if (CrossWiredScoped4 == null) throw new ArgumentException(nameof(CrossWiredScoped4)); 
			if (CrossWiredSingleton1 == null) throw new ArgumentException(nameof(CrossWiredSingleton1)); 
			if (CrossWiredSingleton2 == null) throw new ArgumentException(nameof(CrossWiredSingleton2)); 
			if (CrossWiredSingleton3 == null) throw new ArgumentException(nameof(CrossWiredSingleton3)); 
			if (CrossWiredSingleton4 == null) throw new ArgumentException(nameof(CrossWiredSingleton4)); 
		}
	}

	public partial class ViewComponentCrossWired : ViewComponent
	{
		public ViewComponentCrossWired
		(
			CrossWiredTransient CrossWiredTransient1, 
			CrossWiredTransientGeneric<OpenOptions> CrossWiredTransient2, 
			CrossWiredTransientGeneric<ClosedOptions> CrossWiredTransient3, 
			CrossWiredTransientDisposable CrossWiredTransient4 ,
			CrossWiredScoped CrossWiredScoped1, 
			CrossWiredScopedGeneric<OpenOptions> CrossWiredScoped2, 
			CrossWiredScopedGeneric<ClosedOptions> CrossWiredScoped3, 
			CrossWiredScopedDisposable CrossWiredScoped4 ,
			CrossWiredSingleton CrossWiredSingleton1, 
			CrossWiredSingletonGeneric<OpenOptions> CrossWiredSingleton2, 
			CrossWiredSingletonGeneric<ClosedOptions> CrossWiredSingleton3, 
			CrossWiredSingletonDisposable CrossWiredSingleton4 )

		{
			if (CrossWiredTransient1 == null) throw new ArgumentException(nameof(CrossWiredTransient1)); 
			if (CrossWiredTransient2 == null) throw new ArgumentException(nameof(CrossWiredTransient2)); 
			if (CrossWiredTransient3 == null) throw new ArgumentException(nameof(CrossWiredTransient3)); 
			if (CrossWiredTransient4 == null) throw new ArgumentException(nameof(CrossWiredTransient4)); 
			if (CrossWiredScoped1 == null) throw new ArgumentException(nameof(CrossWiredScoped1)); 
			if (CrossWiredScoped2 == null) throw new ArgumentException(nameof(CrossWiredScoped2)); 
			if (CrossWiredScoped3 == null) throw new ArgumentException(nameof(CrossWiredScoped3)); 
			if (CrossWiredScoped4 == null) throw new ArgumentException(nameof(CrossWiredScoped4)); 
			if (CrossWiredSingleton1 == null) throw new ArgumentException(nameof(CrossWiredSingleton1)); 
			if (CrossWiredSingleton2 == null) throw new ArgumentException(nameof(CrossWiredSingleton2)); 
			if (CrossWiredSingleton3 == null) throw new ArgumentException(nameof(CrossWiredSingleton3)); 
			if (CrossWiredSingleton4 == null) throw new ArgumentException(nameof(CrossWiredSingleton4)); 
		}
	}
}
